#include <iostream>
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>
#include<string.h>
using namespace std;
void myhendler(int signal)
{
    cout<<"in myhendler\n";
    sigset_t sigset;
    sigemptyset(&sigset);
    while (true)
    {
        sigpending(&sigset);
        for (int i = 31; i >= 1; i--)
        {
            if (sigismember(&sigset, i))
            {
                cout << "1 ";
            }
            else
            {
                cout << "0 ";
            }
        }
         cout << endl;
         sleep(1);
    }
   
}

int main()
{
    // //验证信号是在递达前就置为0的；
    // signal(2,myhendler);
    // while(true)
    // {
    //     cout<<"process continue\n";
    //     sleep(1);
    // }

    // 验证在处理函数的时候，会自动将该信号处于屏蔽状态；
    // signal(2, myhendler);
    // while (true)
    // {
    //     cout << "process continue\n";
    //     sleep(1);
    // }


    //使用捕捉函数sigaction;
    struct sigaction act,oact;
    memset(&act,0,sizeof(act));
    memset(&oact,0,sizeof(oact));
    act.sa_handler = myhendler;
    //可以通过设置mask来进行阻塞信号；
    sigemptyset(&act.sa_mask);
    sigaddset(&act.sa_mask,1);
    sigaddset(&act.sa_mask,3);
    sigaddset(&act.sa_mask,4);
    sigaddset(&act.sa_mask,5);
    int n = sigaction(2,&act,&oact);
    if(n<0)
    {
        return 0;
    }
    while(true)
    {
        cout<<"process continue"<<endl;
    }

    return 0;
}